#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <error.h>
#include <errno.h>
#include <fcntl.h> 

#if 1

#define PROMPT "你想终止程序吗?" 

char *prompt=PROMPT; 

void ctrl_c_op(int signo) 
{ 
	write(STDERR_FILENO,prompt,strlen(prompt)); 
} 

int  main() 
{ 
	struct sigaction act; 

	act.sa_handler=ctrl_c_op; 
	sigemptyset(&act.sa_mask); 
	act.sa_flags=0; 

	if(sigaction(SIGINT,&act,NULL)<0) 
	{ 
		fprintf(stderr,"Install Signal Action Error:%s\n\a",strerror(errno)); 
		exit(1); 
	} 
	while(1); 
} 
#endif

#if 0
void test(int n,struct siginfo *siginfo,void *myact)
{
         printf("signal number:%d\n",n);/** 打印出信号值 **/
         printf("siginfo signo:%d\n",siginfo->si_signo); /** siginfo结构里保存的信号值 **/
         printf("siginfo errno:%d\n",siginfo->si_errno); /** 打印出错误代码 **/
         printf("siginfo code:%d\n",siginfo->si_code);   /**　打印出出错原因 **/
}

int main(void)
{
         /** install signal use sigaction **/
         struct sigaction act;

         sigemptyset(&act.sa_mask);   /** 清空阻塞信号 **/

         act.sa_flags = SA_SIGINFO;     /** 设置SA_SIGINFO 表示传递附加信息到触发函数 **/
         
		 act.sa_sigaction = test;

         if(sigaction(SIGINT,&act,NULL) < 0)
         {
                 printf("install signal error\n");
         }
         while(1)
         {
                 sleep(1);
                 printf("wait for the signal\n");
         }
}
#endif
